using System;
using System.Data.Common;
using Microsoft.Practices.EnterpriseLibrary.Data; 
using LibreriaCommon;
using LibreriaDS; 

namespace LibreriaData
{
    /// <summary>
    /// Clase de acceso a datos de Roles.
    /// </summary>
    public abstract class daRolBase : daBase, IDisposable
    {
        /// <summary>
        /// Constructor.
        /// </summary>
        /// <param name="securityInfo">Referencia a un objeto SecurityInfo.</param>
        public daRolBase(SecurityInfo securityInfo)
            : base(securityInfo)
		{
		}

		#region Dispose
		private bool disposed = false;

		public void Dispose()
		{
			Dispose(true);
			GC.SuppressFinalize(this);
		}

		protected void Dispose(bool disposing)
		{
			if (!this.disposed)
			{
				if (disposing)
				{
					//Liberar recursos manejados
				}

				//liberar recursos no manejados
			}

			disposed = true;         
		}

		~daRolBase()
		{
			Dispose(false);
		}
		#endregion Dispose

		/// <summary>
		/// Buscar Rol por clave primaria.
		/// </summary>
		/// <param name="id">Id. del Rol</param>
		/// <returns>dsRol</returns>
        public virtual dsRol FindByPrimaryKey(int id) 
        { 
            try 
            { 
                dsRol ds = new dsRol(); 
                daCommon.GenericFind(securityInfo, "RolFindByPrimaryKey", ds, new string[] {"Rol"}, id); 
                return ds; 
            } 
            catch (Exception ex) 
            { 
                throw new daException(ex);
            } 
        }

        /// <summary>
        /// Buscar Rol por Nombre.
        /// </summary>
        /// <param name="nombre">Nombre unico del Rol, independientemente si esta activo o no</param>
        /// <returns>dsRol</returns>
        public virtual dsRol FindByNombre(string nombre)
        {
            try
            {
                dsRol ds = new dsRol();
                daCommon.GenericFind(securityInfo, "RolFindByNombre", ds, new string[] { "Rol" }, nombre);
                return ds;
            }
            catch (Exception ex)
            {
                throw new daException(ex);
            }
        }

        /// <summary>
        /// Buscar Roles por estado.
        /// </summary>
        /// <param name="estado">Estado (null para todos)</param>
        /// <returns>dsRol</returns>
        public virtual dsRol FindByEstado(object estado) 
        { 
            try 
            { 
                dsRol ds = new dsRol(); 
                daCommon.GenericFind(securityInfo, "RolFindByEstado", ds, new string[] {"Rol"}, estado); 
                return ds; 
            } 
            catch (Exception ex) 
            { 
                throw new daException(ex);
            } 
        }

        /// <summary>
        /// Actualizar Roles.
        /// </summary>
        /// <param name="ds">dsRol</param>
        public virtual void Update(dsRol ds) 
        { 
            Database conn = null; 
			DbCommand insertCommand = null; 
            DbCommand updateCommand = null; 

            try 
            {
                string[] parameters = new string[] { "RolID", "RolNombre", "Activo", "FechaAlta", "UsuarioAlta", "FechaModificacion", "UsuarioModificacion" };
				
				conn = daConnection.GetOpenedConnection();
                insertCommand = conn.GetStoredProcCommandWithSourceColumns("RolInsert", parameters);
                updateCommand = conn.GetStoredProcCommandWithSourceColumns("RolUpdate", parameters); 
                daCommon.UpdateDataset(securityInfo, insertCommand, null, updateCommand, ds, "Rol"); 
                ds.AcceptChanges(); 
            } 
            catch (Exception ex) 
            { 
                throw new daException(ex);
            } 
            finally 
            { 
				if (insertCommand != null) 
				{ 
					insertCommand.Dispose(); 
				} 
				
				if (updateCommand != null) 
                { 
                    updateCommand.Dispose(); 
                } 
            } 
        } 
    }
}